home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / bash_114.zip / bash-1.14.2 / vprint.c < prev    next >
C/C++ Source or Header  |  1993-02-10  |  2KB  |  81 lines

  1. /* vprint.c -- v[fs]printf() for 4.[23] BSD systems. */
  2.  
  3. /* Copyright (C) 1987,1989 Free Software Foundation, Inc.
  4.  
  5. This file is part of GNU Bash, the Bourne Again SHell.
  6.  
  7. Bash is free software; you can redistribute it and/or modify it under
  8. the terms of the GNU General Public License as published by the Free
  9. Software Foundation; either version 1, or (at your option) any later
  10. version.
  11.  
  12. Bash is distributed in the hope that it will be useful, but WITHOUT ANY
  13. WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14. FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  15. for more details.
  16.  
  17. You should have received a copy of the GNU General Public License along
  18. with Bash; see the file COPYING.  If not, write to the Free Software
  19. Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
  20.  
  21. #include <stdio.h>
  22.  
  23. #if !defined (NULL)
  24. #  if defined (__STDC__)
  25. #    define NULL ((void *)0) 
  26. #  else
  27. #    define NULL 0x0
  28. #  endif /* __STDC__ */
  29. #endif /* !NULL */
  30.  
  31. /*
  32.  * Beware!  Don't trust the value returned by either of these functions; it
  33.  * seems that pre-4.3-tahoe implementations of _doprnt () return the first
  34.  * argument, i.e. a char *.
  35.  */
  36. #include <varargs.h>
  37.  
  38. int
  39. vfprintf (iop, fmt, ap)
  40.      FILE *iop;
  41.      char *fmt;
  42.      va_list ap;
  43. {
  44.   int len;
  45.   char localbuf[BUFSIZ];
  46.  
  47.   if (iop->_flag & _IONBF)
  48.     {
  49.       iop->_flag &= ~_IONBF;
  50.       iop->_ptr = iop->_base = localbuf;
  51.       len = _doprnt (fmt, ap, iop);
  52.       (void) fflush (iop);
  53.       iop->_flag |= _IONBF;
  54.       iop->_base = NULL;
  55.       iop->_bufsiz = 0;
  56.       iop->_cnt = 0;
  57.     }
  58.   else
  59.     len = _doprnt (fmt, ap, iop);
  60.   return (ferror (iop) ? EOF : len);
  61. }
  62.  
  63. /*
  64.  * Ditto for vsprintf
  65.  */
  66. int
  67. vsprintf (str, fmt, ap)
  68.      char *str, *fmt;
  69.      va_list ap;
  70. {
  71.   FILE f;
  72.   int len;
  73.  
  74.   f._flag = _IOWRT|_IOSTRG;
  75.   f._ptr = str;
  76.   f._cnt = 32767;
  77.   len = _doprnt (fmt, ap, &f);
  78.   *f._ptr = 0;
  79.   return (len);
  80. }
  81.